/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.eventos.beans;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.cip.esymons.eventos.adapaters.ExportarExcel;
import org.cip.esymons.eventos.adapaters.RutaCarpetaReporte;
import org.cip.esymons.eventos.bc.DetalleEncuestaDelegate;
import org.cip.esymons.eventos.bc.EncuestaDelegate;
//import org.cip.esymons.eventos.bc.EventoDelegate;
import org.cip.esymons.eventos.bc.MatriculaDelegate;
import org.cip.esymons.eventos.bc.ModuloCursoDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.be.DetalleEncuesta;
import org.cip.esymons.eventos.be.Encuesta;
import org.cip.esymons.eventos.be.Matricula;
import org.cip.esymons.eventos.be.ModuloCurso;
import org.cip.esymons.eventos.be.Preevento;

/**
 *
 * @author oscar
 */
public class EncuestaController {

    EncuestaDelegate delegate;
    DetalleEncuestaDelegate delegateDetalleEncuesta;
    Encuesta encuesta;
    List<DetalleEncuesta> listaDetEncuesta;
    //lizardo estuvi aqui
    Integer codigoCurso;
    ModuloCursoDelegate delegadoModuloCurso;
    Integer codigoModulos;
    Long codigoAlumno;
    String tema;
    String firma = "";
    MatriculaDelegate delegateMatricula;
    String respuesta;
    RutaCarpetaReporte ruta;

    public EncuestaController() {
        inicializar();
    }

    public String getRespuesta() {
        return respuesta;
    }

    public void setRespuesta(String respuesta) {
        this.respuesta = respuesta;
    }

    public Long getCodigoAlumno() {
        return codigoAlumno;
    }

    public void setCodigoAlumno(Long codigoAlumno) {
        this.codigoAlumno = codigoAlumno;
    }

    public String getFirma() {
        return firma;
    }

    public void setFirma(String firma) {
        this.firma = firma;
    }

    public String getTema() {
        return tema;
    }

    public void setTema(String tema) {
        this.tema = tema;
    }

    public Integer getCodigoModulos() {
        return codigoModulos;
    }

    public void setCodigoModulos(Integer codigoModulos) {
        this.codigoModulos = codigoModulos;
    }

    public Integer getCodigoCurso() {
        return codigoCurso;
    }

    public void setCodigoCurso(Integer codigoCurso) {
        this.codigoCurso = codigoCurso;
    }

    public Encuesta getEncuesta() {
        return encuesta;
    }

    public void setEncuesta(Encuesta encuesta) {
        this.encuesta = encuesta;
    }

    public List<DetalleEncuesta> getListaDetEncuesta() {
        return listaDetEncuesta;
    }

    public void setListaDetEncuesta(List<DetalleEncuesta> listaDetEncuesta) {
        this.listaDetEncuesta = listaDetEncuesta;
    }

//lizardo estuvo aqui y comento el metodo de oscar

//    public String llenarEncuesta() {
//        listaDetEncuesta.clear();
//        try {
//            encuesta.setModCodigo(delegadoModuloCurso.find(codigoModulos));
//        } catch (Exception e) {
//
//            System.out.println("FATAL: " + e.getMessage());
//        }
//        DetalleEncuesta det = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 0);
//        String tipo = encuesta.getModCodigo().getCurCodigo().getTipo() + " ";
//        String acron = encuesta.getModCodigo().getModAcronimo();
//        det.setDenPregunta(tipo.toUpperCase());
//        listaDetEncuesta.add(det);
//        DetalleEncuesta det11 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 1);
//        det11.setDenPregunta("¿Qué le pareció el Modulo " + acron);
//        listaDetEncuesta.add(det11);
//        DetalleEncuesta det12 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 1);
//        det12.setDenPregunta("¿Logró satisfacer sus expectativas el " + tipo + "- Módulo " + acron + "?");
//        listaDetEncuesta.add(det12);
//        DetalleEncuesta det13 = new DetalleEncuesta("5", "4", "3", "2", "1", "3", tema, firma, "1", 1);
//        det13.setDenPregunta("¿El Material entregado esta acorde con el " + tipo + "- Módulo " + acron + "?");
//        listaDetEncuesta.add(det13);
//        DetalleEncuesta det14 = new DetalleEncuesta("5", "4", "3", "2", "1", "4", tema, firma, "1", 1);
//        det14.setDenPregunta("¿Las herramientas que utilizó le ayudo en el desarrollo del " + tipo + "- Módulo " + acron + "?");
//        listaDetEncuesta.add(det14);
//        DetalleEncuesta det20 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 2);
//        det20.setDenPregunta("DOCENTE");
//        listaDetEncuesta.add(det20);
//        DetalleEncuesta det21 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 2);
//        det21.setDenPregunta("¿El docente mostró amplio conocimiento del tema?");
//        listaDetEncuesta.add(det21);
//        DetalleEncuesta det22 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 2);
//        det22.setDenPregunta("¿El docente mostró amabilidad con los alumnos?");
//        listaDetEncuesta.add(det22);
//        DetalleEncuesta det23 = new DetalleEncuesta("5", "4", "3", "2", "1", "3", tema, firma, "1", 2);
//        det23.setDenPregunta("¿El docente fue claro durante el dictado del Módulo " + acron + "?");
//        listaDetEncuesta.add(det23);
//        DetalleEncuesta det24 = new DetalleEncuesta("5", "4", "3", "2", "1", "4", tema, firma, "1", 2);
//        det24.setDenPregunta("¿El material entregado por el docente es claro y preciso?");
//        listaDetEncuesta.add(det24);
//        DetalleEncuesta det25 = new DetalleEncuesta("5", "4", "3", "2", "1", "5", tema, firma, "1", 2);
//        det25.setDenPregunta("¿El docente mostró puntualidad?");
//        listaDetEncuesta.add(det25);
//        DetalleEncuesta det30 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 3);
//        det30.setDenPregunta("PERSONAL CIP - CDLL");
//        listaDetEncuesta.add(det30);
//        DetalleEncuesta det31 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 3);
//        det31.setDenPregunta("¿Cómo calificaría la atención del personal?");
//        listaDetEncuesta.add(det31);
//        DetalleEncuesta det32 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 3);
//        det32.setDenPregunta("¿El material se le entregó oportunamente?");
//        listaDetEncuesta.add(det32);
//        DetalleEncuesta det40 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 4);
//        det40.setDenPregunta("OTROS ");
//        listaDetEncuesta.add(det40);
//        DetalleEncuesta det41 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 4);
//        det41.setDenPregunta("¿Los ambientes le parecen adecuados?");
//        listaDetEncuesta.add(det41);
//        DetalleEncuesta det42 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 4);
//        det42.setDenPregunta("¿Qué le pareció la calidad del Break?");
//        listaDetEncuesta.add(det42);
//        return null;
//    }

    //lizardo estuvo aqui
    public String llenarEncuesta() {
        String tipo = null;
        String acron = null;
        try {
            listaDetEncuesta.clear();
            DetalleEncuesta det = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 0);
            Preevento evento = new Preevento();
            PreEventoDelegate delegadoEvento = new PreEventoDelegate();
            codigoCurso = (codigoCurso != null) ? codigoCurso : 0;
            evento = delegadoEvento.findID(codigoCurso);
            ModuloCurso modulo = new ModuloCurso();
            codigoModulos = (codigoModulos != null) ? codigoModulos : 0;
            modulo = delegadoModuloCurso.find(codigoModulos);
            tipo = (evento != null) ? evento.getPreNombre() + " " : "No hay evento ";
            acron = (modulo != null) ? modulo.getModAcronimo() : "No hay modulo";
            det.setDenPregunta(tipo.toUpperCase());
            listaDetEncuesta.add(det);
            DetalleEncuesta det11 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 1);
            det11.setDenPregunta("¿Qué le pareció el Modulo " + acron);
            listaDetEncuesta.add(det11);
            DetalleEncuesta det12 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 1);
            det12.setDenPregunta("¿Logró satisfacer sus expectativas el " + tipo + "- Módulo " + acron + "?");
            listaDetEncuesta.add(det12);
            DetalleEncuesta det13 = new DetalleEncuesta("5", "4", "3", "2", "1", "3", tema, firma, "1", 1);
            det13.setDenPregunta("¿El Material entregado esta acorde con el " + tipo + "- Módulo " + acron + "?");
            listaDetEncuesta.add(det13);
            DetalleEncuesta det14 = new DetalleEncuesta("5", "4", "3", "2", "1", "4", tema, firma, "1", 1);
            det14.setDenPregunta("¿Las herramientas que utilizó le ayudo en el desarrollo del " + tipo + "- Módulo " + acron + "?");
            listaDetEncuesta.add(det14);
            DetalleEncuesta det20 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 2);
            det20.setDenPregunta("DOCENTE");
            listaDetEncuesta.add(det20);
            DetalleEncuesta det21 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 2);
            det21.setDenPregunta("¿El docente mostró amplio conocimiento del tema?");
            listaDetEncuesta.add(det21);
            DetalleEncuesta det22 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 2);
            det22.setDenPregunta("¿El docente mostró amabilidad con los alumnos?");
            listaDetEncuesta.add(det22);
            DetalleEncuesta det23 = new DetalleEncuesta("5", "4", "3", "2", "1", "3", tema, firma, "1", 2);
            det23.setDenPregunta("¿El docente fue claro durante el dictado del Módulo " + acron + "?");
            listaDetEncuesta.add(det23);
            DetalleEncuesta det24 = new DetalleEncuesta("5", "4", "3", "2", "1", "4", tema, firma, "1", 2);
            det24.setDenPregunta("¿El material entregado por el docente es claro y preciso?");
            listaDetEncuesta.add(det24);
            DetalleEncuesta det25 = new DetalleEncuesta("5", "4", "3", "2", "1", "5", tema, firma, "1", 2);
            det25.setDenPregunta("¿El docente mostró puntualidad?");
            listaDetEncuesta.add(det25);
            DetalleEncuesta det30 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 3);
            det30.setDenPregunta("PERSONAL CIP - CDLL");
            listaDetEncuesta.add(det30);
            DetalleEncuesta det31 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 3);
            det31.setDenPregunta("¿Cómo calificaría la atención del personal?");
            listaDetEncuesta.add(det31);
            DetalleEncuesta det32 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 3);
            det32.setDenPregunta("¿El material se le entregó oportunamente?");
            listaDetEncuesta.add(det32);
            DetalleEncuesta det40 = new DetalleEncuesta("", "", "", "", "", "", tema, firma, "0", 4);
            det40.setDenPregunta("OTROS ");
            listaDetEncuesta.add(det40);
            DetalleEncuesta det41 = new DetalleEncuesta("5", "4", "3", "2", "1", "1", tema, firma, "1", 4);
            det41.setDenPregunta("¿Los ambientes le parecen adecuados?");
            listaDetEncuesta.add(det41);
            DetalleEncuesta det42 = new DetalleEncuesta("5", "4", "3", "2", "1", "2", tema, firma, "1", 4);
            det42.setDenPregunta("¿Qué le pareció la calidad del Break?");
            listaDetEncuesta.add(det42);
        } catch (Exception e) {
            mostrarMensaje("ERROR: ", "Error en llenar la encuestar revisar metodo llenarEncuesta", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + e.getMessage());
        }
        return null;
    }

    @SuppressWarnings("static-access")
    public String visualizarEncuesta() {
        llenarEncuesta();
        if (listaDetEncuesta.size() > 0) {
            String rutaJasper = "", rutaPDF = "";
            rutaJasper = ruta.getRutaReporte() + "Encuesta_Curso.jasper";
            rutaPDF = ruta.getRuta() + "Encuesta_Curso.pdf";

            String logoReporte = ruta.getRutaLogo();
            Map parametros = new HashMap();
            parametros.put("pLogo", logoReporte);

            try {
                File entrada = new File(rutaJasper);
                JasperPrint print = JasperFillManager.fillReport(new FileInputStream(entrada), parametros, new JRBeanCollectionDataSource(listaDetEncuesta));
                if (ruta.generarPDF(rutaPDF, print)) {}
                mostrarMensaje("INFO: ", "Encuesta generada...", FacesMessage.SEVERITY_INFO);
            } catch (Exception ex) {
                mostrarMensaje("ERROR: ", "Al generar la encuesta...", FacesMessage.SEVERITY_ERROR);
                mostrarMensaje("FATAL: ", ex.getMessage(), FacesMessage.SEVERITY_FATAL);
                //System.out.println("FATAL: " + ex.getMessage());
            }
        } else {
            //ruta.error("Deben existir datos en la Lista para exportar");
            mostrarMensaje("ERROR: ", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
        }
        return "";
    }

    public SelectItem[] getComboModulos() {
        try {
            SelectItem[] selects = null;
            //List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModuloXCurso(codigoCurso);
            //corregido por lizardo
            List<ModuloCurso> listaModulos = delegadoModuloCurso.listarModulo(codigoCurso);
            selects = new SelectItem[listaModulos.size()];
            int cont = 0;
            for (ModuloCurso modulos : listaModulos) {
                SelectItem item = new SelectItem(modulos.getModCodigo(), modulos.getModNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen modulos");
            selects[0] = item;
            return selects;
        }
    }

    public SelectItem[] getComboAlumnos() {
        try {
            SelectItem[] selects = null;
            List<Matricula> listaMatriculas = delegateMatricula.listarMatriculadosXCurso(codigoCurso);
            selects = new SelectItem[listaMatriculas.size()];
            int cont = 0;
            for (Matricula mat : listaMatriculas) {
                SelectItem item = new SelectItem(mat.getMatCodigo(), mat.getPreinscripcionEvento().getPerCodigo().getNombreCompletoPersona());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen Alumnos");
            selects[0] = item;
            return selects;
        }
    }

    @SuppressWarnings("static-access")
    public String registrarEncuesta() {
//        boolean ban = false;
        try {
            Matricula mat = delegateMatricula.buscarID(codigoAlumno);
            delegate.verificar(encuesta.getModCodigo(), mat.getPreinscripcionEvento());
            //ruta.error("Ya registro anterioremnete esta encuesta,verifique Alumno o Modulo");
            mostrarMensaje("ERROR: ", "Ya se registro anteriormente esta encuesta, verifique Alumno o Modulo", FacesMessage.SEVERITY_ERROR);
        } catch (Exception e) {
            System.out.println("No existe la encuesta");
            try {
                //Grabar Encuesta
                encuesta.setEncFecha(new Date());
                Matricula mat = delegateMatricula.buscarID(codigoAlumno);
                ModuloCurso mod = new ModuloCurso();
                mod = delegadoModuloCurso.find(codigoModulos);
                encuesta.setModCodigo(mod);
                encuesta.setPinCodigo(mat.getPreinscripcionEvento());
                delegate.registrar(encuesta);
                //Grabar Detalle, Preguntas
                int i = 1;
                for (DetalleEncuesta det : listaDetEncuesta) {

                    det.setEncCodigo(encuesta);
                    try {
                        if (det.getTipo().equals("1")) {
                            det.setDenNumero(i);
                            i++;
                            det.setDenRespuesta(Integer.parseInt(det.getRespuesta()));
                        } else {
                            det.setDenRespuesta(0);
                            det.setDenNumero(new Integer(0));
                        }
                    } catch (Exception ex) {
                        //mostrarMensaje("ERROR: ", "No seleccionó una opción de respuesta...", FacesMessage.SEVERITY_ERROR);
                        System.out.println("Error en" + ex.toString());
                        System.out.println("DETALLE ENCUESTA");
                        System.out.println("----------------");
                        System.out.println("den_codigo       : " + det.getDenCodigo());
                        System.out.println("enc_codigo       : " + det.getEncCodigo());
                        System.out.println("enc_tipoPregunta : " + det.getTipo());
                        System.out.println("den_pregunta     : " + det.getDenPregunta());
                        System.out.println("den_numPregunta  : " + det.getDenNumero());
                        det.setDenRespuesta(0);
                        System.out.println("den_respuesta    : " + det.getDenRespuesta());
                    }
                    delegateDetalleEncuesta.registrar(det);
                }
                //ruta.warn("Se registro la aplicación de la encuesta sastifactoriamente");
                mostrarMensaje("INFO: ", "Se registro la aplicación de la encuesta sastifactoriamente", FacesMessage.SEVERITY_INFO);
                inicializar();
                llenarEncuesta();
            } catch (Exception ex) {
                encuesta = new Encuesta();
                //listaDetEncuesta = new ArrayList<DetalleEncuesta>();
                mostrarMensaje("ERROR: ", "Al registrar la encuesta, debe seleccionar una opciòn de respuesta por pregunta", FacesMessage.SEVERITY_ERROR);
                System.out.println("FATAL: " + ex.getMessage());
            }
        }
        return null;
    }

    private void inicializar() {
        encuesta = new Encuesta();
        delegate = new EncuestaDelegate();
        listaDetEncuesta = new ArrayList<DetalleEncuesta>();
        delegateDetalleEncuesta = new DetalleEncuestaDelegate();
        delegadoModuloCurso = new ModuloCursoDelegate();
        delegateMatricula = new MatriculaDelegate();
        ruta = new RutaCarpetaReporte();
        //codigoCurso = 0;
        //codigoModulos = 0;
        //codigoAlumno = 0L;
    }

    @SuppressWarnings("static-access")
    public String generarResultados() {
        listaDetEncuesta.clear();
        try {
            encuesta.setModCodigo(delegadoModuloCurso.find(codigoModulos));
            listaDetEncuesta = delegateDetalleEncuesta.listarResultadosxModulo(encuesta.getModCodigo());
            System.out.print("-Tamanio---" + listaDetEncuesta.size());
            System.out.print("--Modulo--" + encuesta.getModCodigo().getModNombre());
            if (listaDetEncuesta.size() > 0) {
                String rutaPlantilla = "", archGenerado = "";
                rutaPlantilla = ruta.getRuta() + "PlantillaEncuesta.xls";
                archGenerado = ruta.getRuta() + "EncuestaxModulo.xls";
                ExportarExcel export = new ExportarExcel();
                try {
                    export.generarDocDesdePlantilla(rutaPlantilla, archGenerado);
                    int i = 24;
                    for (DetalleEncuesta det : listaDetEncuesta) {
                        System.out.print("--res1--" +det.getResultado1());
                        export.addCeldaString(i, 2, encuesta.getModCodigo().getModNombre());
                        export.addCeldaString(i, 3, det.getDenPregunta());
                        export.addCeldaInteger(i, 4, det.getResultado1());
                        export.addCeldaInteger(i, 5, det.getResultado2());
                        export.addCeldaInteger(i, 6, det.getResultado3());
                        export.addCeldaInteger(i, 7, det.getResultado4());
                        export.addCeldaInteger(i, 8, det.getResultado5());
                        i++;
                    }
                    ruta.generarExcel(archGenerado, export.cerrarConexion());
                } catch (Exception e) {
                    ruta.generarExcel(archGenerado, export.cerrarConexion());
                    System.out.print("----" + e.toString());
                }
            } else {
                //ruta.error("Deben existir datos en la Lista para exportar");
                mostrarMensaje("ERROR: ", "Deben existir datos en la Lista para exportar", FacesMessage.SEVERITY_ERROR);
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "Al generar la exportacion", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }

}
